'''
Created on May 24, 2011


@author: Claudia Maria Luque Fernandez 
         Vanesa Gonzalez Perez
         Juan Jesus Fernandez Madrid

@organization: Universidad de Cordoba
         
@summary: En este modulo se encuentra la implementacion referente al modelo controlador del MVC.

@requires: python, pyqt, nltk

@contact: i42lufec@uco.es , i52gopev@uco.es , i52femaj@uco.es

@version: 1.0

'''

import ckVistaAp
from ckModeloAp import etiquetado
from ckModeloAp import ExtraccionInformacion
from ckModeloAp import corpusIAIC
from PyQt4 import QtGui, QtCore
import time
import thread


labelFile=ExtraccionInformacion.rulesDir +'Etiquetas.etq'
grammarFile=ExtraccionInformacion.rulesDir+'Gramatica.gr'
progdialog = 0



def event_say_hi():
    '''
    Gestor de eventos basico
    '''
    
    print "hi there, everyone!"
    
    
def event_open_document():
    '''
    Evento que notifica sobre el documento abierto.
    '''

    
    
def event_return_entities(text, par):
    '''
        Muestra todas las entidades de un texto dato
        @param text: el texto a ser procesado
        @param par: el elemento padre de la interfaz grafica
    '''
    texto=""
    progdialog = QtGui.QProgressDialog('Extrayendo entidades...',QtCore.QString(),0,12, par, QtCore.Qt.Dialog|QtCore.Qt.WindowTitleHint)
    progdialog.setWindowModality(QtCore.Qt.WindowModal)
    progdialog.setWindowTitle('Por favor espere')
    progdialog.show()

    progdialog.setValue(0);
    time.sleep(1)
    
    #texto = "\n\n\t\tPASO 1\n\n"    
       
    #Obtiene un arbol de reconocimiento
    progdialog.setValue(1);
    time.sleep(1)
    tree=ExtraccionInformacion.getTree(text, labelFile, grammarFile,tr=False)

        #Presenta el arbol reconocido
#        printTree(tree)
        #Obtencion de las entidades desde un arbol de chunks
    progdialog.setValue(2);
    time.sleep(1)
    ExtraccionInformacion.getEntityFromTree(tree)

    #Representacion del texto en un formato IOB
    progdialog.setValue(3);
    time.sleep(1)
    texto += "\n\n"
    #texto += str(ExtraccionInformacion.tree2conllstr(tree))

    #print ExtraccionInformacion.tree2conllstr(tree)
        #Escribe el texto en un formato IOB
    progdialog.setValue(4);
    time.sleep(1)
    ExtraccionInformacion.writeCunkedSentToIOBFormat(tree,dirOut=ExtraccionInformacion.dirOut,newFile='salida.iob',tr=0)

    progdialog.setValue(5);
    time.sleep(1)
    texto += "\n\n\t\tENTIDADES:"
    texto += "\n\n\n\tEntidad HOMBRE: \n\n\n"
    texto +=  str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['HOMBRE'],tr=True))

    progdialog.setValue(6);
    time.sleep(1)
    texto += "\n\n\n\tEntidad MUJER: \n\n"
    texto +=  str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['MUJER'],tr=True))


    progdialog.setValue(7);
    time.sleep(1)    
    texto += "\n\n\tEntidad BIENES:\n\n"
    texto += str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['BIENES'],tr=True))

    progdialog.setValue(8);
    time.sleep(1)
    texto += "\n\n\n\tEntidad LUGAR:\n\n"
    texto += str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['LUGAR'],tr=True))
    
    
    progdialog.setValue(9);
    time.sleep(1)
    texto += "\n\n\n\tEntidad ARRENDAMIENTO:\n\n"
    texto +=  str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['ARRENDAMIENTO'],tr=True))
    
    
    progdialog.setValue(10);
    time.sleep(1)
    texto += "\n\n\n\tEntidad PAGOS:\n\n"
    texto += str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['PAGOS'],tr=True))
    
    
    progdialog.setValue(11);
    time.sleep(1)
    texto += "\n\n\n\tEntidad RELACIONES FAMILIARES:\n\n"
    texto += str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['RELFAMILIARES'],tr=True))
    
    
    time.sleep(1)
    progdialog.setValue(12);

    return texto


def event_return_UNIQUE_entities(text, entity, par):
    '''
        Funcion que muestra la entidad pasada por parametro en el caso de que el usuario la haya introducido
        @param text: El texto a ser procesado y del cual se extraeran las entidades 
        @param entity: Entidad sobre la que se realizara la extraccion de dicha entidad
        @param par: el elemento padre de la interfaz grafica
    '''
    
    progdialog = QtGui.QProgressDialog('Extrayendo entidades...',QtCore.QString(),0,6, par, QtCore.Qt.Dialog|QtCore.Qt.WindowTitleHint)
    progdialog.setWindowModality(QtCore.Qt.WindowModal)
    progdialog.setWindowTitle('Por favor espere')
    progdialog.show()


    progdialog.setValue(0);
    time.sleep(1)
    
    texto = "\n\tEntidades + " + entity +" encontradas: \n\n"
    
    #labelFile=ExtraccionInformacion.rulesDir +'Etiquetas.etq'
    #grammarFile=ExtraccionInformacion.rulesDir+'Gramatica.gr'
    progdialog.setValue(1);
    time.sleep(1)
    tree=ExtraccionInformacion.getTree(text, labelFile, grammarFile,tr=False)
    
    progdialog.setValue(2);
    time.sleep(1)
    ExtraccionInformacion.getEntityFromTree(tree) 
    
    progdialog.setValue(3);
    time.sleep(1)  
    ExtraccionInformacion.tree2conllstr(tree)

    progdialog.setValue(4);
    time.sleep(1)
    ExtraccionInformacion.writeCunkedSentToIOBFormat(tree,dirOut=ExtraccionInformacion.dirOut,newFile='salida.iob',tr=0)
   
    progdialog.setValue(5);
    time.sleep(1)
    texto +=  str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=entity,tr=True))
    
    
    progdialog.setValue(6);
    time.sleep(1)
    return texto



def event_return_MAN_entities(text, par):
    '''
        Devuelve las entidades existentes que sean hombres en un texto dado
        @param text: El texto a ser procesado y del cual se extraeran las entidades 
        @param par: el elemento padre de la interfaz grafica
    '''
    progdialog = QtGui.QProgressDialog('Extrayendo entidades...',QtCore.QString(),0,6, par, QtCore.Qt.Dialog|QtCore.Qt.WindowTitleHint)
    progdialog.setWindowModality(QtCore.Qt.WindowModal)
    progdialog.setWindowTitle('Por favor espere')
    progdialog.show()


    progdialog.setValue(0);
    time.sleep(1)
    texto = "\n\tEntidades HOMBRE encontradas: \n\n"
    
    progdialog.setValue(1);
    time.sleep(1)
    tree=ExtraccionInformacion.getTree(text, labelFile, grammarFile,tr=False)
    
    progdialog.setValue(2);
    time.sleep(1)
    ExtraccionInformacion.getEntityFromTree(tree) 
    
    progdialog.setValue(3);
    time.sleep(1)  
    ExtraccionInformacion.tree2conllstr(tree)

    progdialog.setValue(4);
    time.sleep(1)
    ExtraccionInformacion.writeCunkedSentToIOBFormat(tree,dirOut=ExtraccionInformacion.dirOut,newFile='salida.iob',tr=0)
   
    progdialog.setValue(5);
    time.sleep(1)   
    texto +=  str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['HOMBRE'],tr=True))
    
    progdialog.setValue(6);
    time.sleep(1) 
    return texto
    

def event_return_WOMAN_entities(text, par):
    '''
        Muestra las mujeres
        @param text: El texto a ser procesado y del cual se extraeran las entidades 
        @param par: el elemento padre de la interfaz grafica
    '''
    progdialog = QtGui.QProgressDialog('Extrayendo entidades...',QtCore.QString(),0,6, par, QtCore.Qt.Dialog|QtCore.Qt.WindowTitleHint)
    progdialog.setWindowModality(QtCore.Qt.WindowModal)
    progdialog.setWindowTitle('Por favor espere')
    progdialog.show()

    
    
    texto = "\n\tEntidades MUJER encontradas: \n\n"
    
    
    progdialog.setValue(1);
    time.sleep(1)
    tree=ExtraccionInformacion.getTree(text, labelFile, grammarFile,tr=False)
    
    progdialog.setValue(2);
    time.sleep(1)
    ExtraccionInformacion.getEntityFromTree(tree) 
    
    progdialog.setValue(3);
    time.sleep(1)  
    ExtraccionInformacion.tree2conllstr(tree)

    progdialog.setValue(4);
    time.sleep(1)
    ExtraccionInformacion.writeCunkedSentToIOBFormat(tree,dirOut=ExtraccionInformacion.dirOut,newFile='salida.iob',tr=0)
   
    progdialog.setValue(5);
    time.sleep(1)    
    texto +=  str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['MUJER'],tr=True))
    
    progdialog.setValue(6);
    time.sleep(1)  
    
    return texto
    

def event_return_PROPERTY_entities(text, par):
    '''
        Muestra los bienes
        @param text: El texto a ser procesado y del cual se extraeran las entidades 
        @param par: el elemento padre de la interfaz grafica
    '''
    progdialog = QtGui.QProgressDialog('Extrayendo entidades...',QtCore.QString(),0,6, par, QtCore.Qt.Dialog|QtCore.Qt.WindowTitleHint)
    progdialog.setWindowModality(QtCore.Qt.WindowModal)
    progdialog.setWindowTitle('Por favor espere')
    progdialog.show()


    texto = "\n\tEntidades BIENES encontradas: \n\n"
    
    progdialog.setValue(1);
    time.sleep(1)
    tree=ExtraccionInformacion.getTree(text, labelFile, grammarFile,tr=False)
    
    progdialog.setValue(2);
    time.sleep(1)
    ExtraccionInformacion.getEntityFromTree(tree) 
    
    progdialog.setValue(3);
    time.sleep(1)  
    ExtraccionInformacion.tree2conllstr(tree)

    progdialog.setValue(4);
    time.sleep(1)
    ExtraccionInformacion.writeCunkedSentToIOBFormat(tree,dirOut=ExtraccionInformacion.dirOut,newFile='salida.iob',tr=0)
   
    progdialog.setValue(5);
    time.sleep(1)  
    texto +=  str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['BIENES'],tr=True))
    
    progdialog.setValue(6);
    time.sleep(1) 
    
    
    return texto    


    
def event_return_HOUSES_entities(text, par):
    '''
        Muestra los arrendamientos
        @param text: El texto a ser procesado y del cual se extraeran las entidades 
        @param par: el elemento padre de la interfaz grafica
    '''
    progdialog = QtGui.QProgressDialog('Extrayendo entidades...',QtCore.QString(),0,6, par, QtCore.Qt.Dialog|QtCore.Qt.WindowTitleHint)
    progdialog.setWindowModality(QtCore.Qt.WindowModal)
    progdialog.setWindowTitle('Por favor espere')
    progdialog.show()

        
    texto = "\n\tEntidades ARRENDAMIENTO encontradas: \n\n"
    
    progdialog.setValue(1);
    time.sleep(1)
    tree=ExtraccionInformacion.getTree(text, labelFile, grammarFile,tr=False)
    
    progdialog.setValue(2);
    time.sleep(1)
    ExtraccionInformacion.getEntityFromTree(tree) 
    
    progdialog.setValue(3);
    time.sleep(1)  
    ExtraccionInformacion.tree2conllstr(tree)

    progdialog.setValue(4);
    time.sleep(1)
    ExtraccionInformacion.writeCunkedSentToIOBFormat(tree,dirOut=ExtraccionInformacion.dirOut,newFile='salida.iob',tr=0)
   
    progdialog.setValue(5);
    time.sleep(1)  
    
    texto +=  str(ExtraccionInformacion.getEntityFromFileIOB(corpusIAIC.corpusIOB, fileName='salida.iob',chunk_types=['ARRENDAMIENTO'],tr=True))
    
    
    progdialog.setValue(6);
    time.sleep(1)
    
    return texto
    